import { ASSET_TYPES } from '../shared/constant.js'

/**
 * this.options._base 就是指代 Vue 可见所谓的全局组件就是使用 Vue.extend 方法把传入的选项处理之后挂载到了 Vue.options.components 上面
 */
export default function initAssetRegisters(Vue) {
  ASSET_TYPES.forEach((type) => {
    Vue[type] = function (id, definition) {
      if (type === 'component') {
        // this 指向 Vue, 注意不是Vue实例 vm
        // 全局组件祖册
        // 子组件可能也有 extend 方法 VueComponent.component 方法
        definition = this.options._base.extend(definition)
      }
      this.options[type + 's'][id] = definition
    }
  })
}
